#ifndef HISI_AVIC_H
#define HISI_AVIC_H
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* End of #ifdef __cplusplus */


#define TEXT_SZ 1000000

#define SEM_SEED 1000
#define AVIC_MAX_STREAMS 512

typedef int64_t int64_t;


typedef struct StRect
{
    int s32X;
    int s32Y;
    unsigned int  u32Width;
    unsigned int u32Height;
}S_RECT;

struct region {
        int x;
        int y;
        unsigned int width;
        unsigned int height;
};


//#define SHOW_CHANLE 4
//#define PIC_SAMPLE PIC_HD720


typedef struct {
    unsigned int chn_id;
    char file_name[500];
    struct region pos;
    pthread_mutex_t mutex;
    int loop;
    pthread_t pid;
} t_player_info;

typedef enum modes {
    normal,
    pause_,
    x2Speed,
    x4Speed,
    x0_1Speed,
    x0_25Speed,
    x0_5Speed
} play_modes;


//视频播放相关
void avic_player_init (t_player_info *p_info);//根据t_player_info创建播放线程
void avic_player_exit (void);//与avic_player_init相对应，结束播放线程
void avic_player_mod_set (play_modes mod);//设置播放模式，正常/暂停/2倍速度/4倍速度/慢放
void avic_player_seek_set (float pos_ratio);//设置播放进度 0-1   0开始    1结束    0.5中间
int64_t avic_player_duration_get (void);//获取文件播放时长,us
int64_t avic_player_dts_get (void);//获取当前播放时间,us

#define VIDEO_MODE_1920_1080    0
#define VIDEO_MODE_2048_1536    1
//海思平台相关
int avic_config_chn(int h265Num); //h265Num:265通道个数1-16, 对应将0-15设置为H265，剩余的默认为H264
int avic_init_sys_info(int width, int height, int mode);//width 屏幕宽度  height屏幕高度  mode解码分辨率 0=1920*1080    1= 2048*1536
int avic_mpp_init(int *init_finished);//库初始化
int avic_open_chn(unsigned char chn_id, struct StRect *pos);//chn_id: 0-15  pos:位置
int avic_close_chn(unsigned char chn_id);//关闭通道  chn_id: 0-15
int avic_chn_status_query(unsigned int chn_id, int &status);
const char * avic_get_version(void);//获取库版本
//live555 using

int avic_add_url(char * url);//增加流地址,返回流地址ID，>=0成功，否则失败
int avic_change_url(int index, char* url);//index为avic_addurl返回值   url为新的留地址；   成功返回0   失败-1
int avic_pause_stream_index(int index);//暂停index路流地址显示，不关闭拉流线程
int avic_get_stream_chn(int index);//获取stream的硬件解码通道  成功后返回值 >= 0
int avic_get_stream_state(int index);//获取stream状态  >0数据流正常    0 无流   < 0 拉流中断；  重启流程：  chn = GetStreamIndex(index) =>ShutdownStreamIndex =>Setstream2enc
int avic_set_stream_enc(int index, int chn);//设置第index路流地址对应硬件chn通道，若线程未开启则开启拉流线程
int avic_shutdown_stream_index(int index);//关闭index路流地址
void avic_set_stream_mod(int streamidx, int stream_mod);//设置chn对应通道的拉流模式  chn:0-15  stream_mod 0:udp,1tcp
int avic_set_log(int mode);//mode :打开/关闭 日志打印 0:关闭日志, 1打开日志 默认打开日志
//设置播放速度
// index 第n路流地址
//speed 播放速度   1 正常播放   2两倍速度播放  0.5慢放0.5倍数 。。。   -4快退四倍速度播放
int avic_SendPlayCommandSpeed(int index, float speed);
//暂停播放
// index 第n路流地址
int avic_SendPauseCommand(int index);
//继续播放
// index 第n路流地址
int avic_SendGoOnPlayCommand(int index);
//前跳一分钟
// index 第n路流地址
//seconds :已经播放的时间 可以开个定时器记时
int avic_SendTripForwordPlayCommand(int index, int seconds);
//后跳一分钟
// index 第n路流地址
//seconds 已经播放的时间 可以开个定时器记时
int avic_SendTripBackwordPlayCommand(int index, int seconds);
//获取文件总时长
// index 第n路流地址
//返回值为文件总时长
int avic_getfiletime(int index);
//跳转到特定播放位置
// index 第n路流地址
//seconds 跳转到播放的时间s
int avic_SendSeekPlayCommand(int index, int seconds);
//	HI_MPI_VDEC_SendStream(VDEC_CHN VdChn, const VDEC_STREAM_S *pstStream, HI_S32 s32MilliSec);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif // HISI_AVIC_H
